package com.wang.tool.idem.aop;

import com.wang.tool.idem.core.DynamicIdemConfigCenter;
import com.wang.tool.idem.core.FixedDynamicIdemConfigCenter;
import org.springframework.context.annotation.Import;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Import({IdemConfiguration.class, IdemRegister.class, SpringIdemConfigSetter.class})
public @interface EnableIdem {


    /**
     * 切面排序
     * 值越大执行越晚,靠近原始实现
     * 同优先级,后解析的更靠近原始实现
     */
    int order() default Integer.MAX_VALUE - 1000;


    /**
     * 动态配置中心
     * @see IdemConfiguration#dynamicConfigCenter
     * @return
     */
    Class<? extends DynamicIdemConfigCenter> dynamicConfigCenter() default FixedDynamicIdemConfigCenter.class;

    /**
     * key构建器
     * @return
     */
    Class<? extends IdemKeyBuilder> keyBuilder();

    /**
     * 幂等保存时间
     * @return
     */
    int defIdemTtl() ;

    /**
     *
     * @return
     */
    int defLockWaitTime();

    /**
     *
     * @return
     */
    int defLockSecond();


}
